package Soligee.controller.bo;




import Soligee.model.vo.cadastros.UsuarioVO;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;


/**
 * A classe <code>ControleSessaoBO</code> manipula atributos de sessão bem como a propria sessao.
 * <br>A classe é compatível <u>apenas</u> com projetos do framework IceFaces.
 * @author adm
 */
public class ControleSessaoBO {
    
     /**
     * Invalida todos os atributos de sessao. Devido a um bug no icefaces
     * não é possível invalidar a sessao.
     */
    public static void invalidarSessao(){
        HttpSession sessao = obterSessao();
        sessao.removeAttribute("usuarioSessao");
       
      //  sessao.invalidate();
        
    }
    
    
     /**
     * Recupera um atributo de sessão
     * @param atributo  String com o atributo a ser recuperado
     * @return um Object com o atributo da sessao 
     */
    public static Object obterAtributo(String atributo){
        Object objeto = null;
        HttpSession sessao = obterSessao();
        objeto = sessao.getAttribute(atributo);
        return(objeto);
    }
    
    
    /**
     * Obtém a sessao corrente. Se não houver, cria uma.
     * @return um objeto com a sessao atual
     */
    public static HttpSession obterSessao(){
        HttpSession session = (HttpSession) 
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);  
        return (session);
    }

   
    /**
     * Recupera o usuario corrente da sessão
     * @return o usuario atual
     */
    public static UsuarioVO obterUsuarioCorrente(){
        UsuarioVO user = null;
        HttpSession sessao = obterSessao();
        user = (UsuarioVO)sessao.getAttribute("usuarioSessao");
        return(user);
    }
    
    
     /**
     * Remove um atributo de sessão
     * @param atributo uma String com o nome do atributo a ser removido
     */
    public static void removerAtributo(String atributo){
        HttpSession sessao = obterSessao();
        sessao.removeAttribute(atributo);
    }
    
    /**
     * Cria um atributo de sessão e atribui um objeto a ele
     * @param nome  uma String contendo o nome do atributo
     * @param objeto  um objeto que será atributo da sessão
     */
    public static void setarAtributo(String nome, Object objeto){
        HttpSession sessao = obterSessao();
        sessao.setAttribute(nome, objeto);
    }
    
}
